如何设置JVM堆大小避免OOM以及常见问题有哪些 | 您所在的位置:网站首页 › jvm 内存大小设置 垃圾回收机制设置 › 如何设置JVM堆大小避免OOM以及常见问题有哪些 |
常见问题容器出现137退出码的含义是什么? 当容器使用内存超过限制时,会出现容器OOM,导致容器被强制关闭。此时业务应用内存可能并未达到JVM堆大小上限,所以不会产生Dump日志。建议您调小JVM堆大小的上限,为容器内其他系统组件预留足够多的内存空间。 当发生OOM Killer时,并不一定会发生JVM OOM,所以不会生成Dump文件。您可以采取以下方式来避免这种情况。 如果是Java应用,可以适当调小JVM的堆内存大小。具体配置,请参见本文。 如果是非Java应用,可以调整实例规格,保证充裕的内存资源。具体配置,请参见变更实例规格。 堆大小和规格内存的参数值可以相同吗?不可以。因为系统自身组件存在内存开销,例如使用SLS进行日志收集(设置日志收集至SLS)时会占用一小部分的内存空间,所以不能将JVM堆大小设置为和规格内存大小相同的数值,需要为这些系统组件预留足够的内存空间。 在JDK 8版本下设置-XX:MaxRAMPercentage值为整数时报错怎么处理?这是JDK 8的一个Bug。具体信息,请参见Java Bug Database。例如,在JDK 8u191版本下,设置-XX:MaxRAMPercentage=70,此时JVM会启动报错。 解决方案如下: 方式一:设置-XX:MaxRAMPercentage为70.0。 说明如果您使用了-XX:InitialRAMPercentage或-XX:MinRAMPercentage,参数值同样不可设置为整数,需按照方式一的形式来设置。 方式二:升级JDK版本至JDK 10及以上版本。 为什么JVM参数设置了6 GB,但是内存使用率却很低?虽然JVM参数已设置-Xms6g -Xmx6g,但是操作系统不会马上分配6 GB的物理内存,需要实际使用后才分配。因此,内存使用率在应用启动的时候,会相对较低,后续会出现攀爬现象。 |
CopyRight 2018-2019 实验室设备网 版权所有 |